#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "Protocol.hpp"
#include "Sock.hpp"
#include <unistd.h>
#include <string.h>

using namespace std;

int main(int args, char *argv[])
{
    // 1.创建套接字文件
    int fd = Socket::Sock();

    // 2.发送链接
    Socket::Connect(fd, argv[1], atoi(argv[2]));

    // 3.发送请求
    request_t req;
    memset(&req, 0, sizeof(req));
    cout << "请输入x: ";
    cin >> req.x;
    cout << "请输入y: ";
    cin >> req.y;
    cout << "请输入op: ";
    cin >> req.op;
    // 对req进行序列化，然后写入
    string json_string = SerializeRequest(req);
    write(fd, json_string.c_str(), json_string.size());
    // 写都是输入型参数，读都是输出型参数
    // 4.获取回应
    // 对获取到的回应进行反序列化
    char buffer[1024];
    size_t s = read(fd, buffer, sizeof(buffer) - 1);
    if (s > 0)
    {
        buffer[s] = 0;
        response_t res;
        memset(&res, 0, sizeof(res));
        string json_string1 = buffer;
        DeserializeResponse(json_string1, res);
        cout << "获取到了回应: " << res.code << " " << res.result << endl;
    }
    
    return 0;
}